#include <iostream>

using namespace std;
// 在 C 中 NULL 是((void *)0)指针，在 C++中 NULL 却是个整数 0。
// 空指针可以被转化成任何指针类型，不能被转换成指针类型外的任何类型。
// nullptr也有其自身的类型，它的类型为std::nullptr_t。std::nullptr_t本身不是指针类型，但是它可以转换为任何指针类型
// typedef decltype(nullptr) nullptr_t;
void Test1() {
  int* a = nullptr;
  double* b = nullptr;
  string* c = nullptr;
}
void func(std::nullptr_t* tmp) {}
void Test2() {
  func(0);
  func(NULL);
  func(nullptr);
  int* a = nullptr;
  // func(a); 编译错误，非指针0值
  int b = 0;
  // func(b);  编译错误，非指针0值
}
int main() {
  Test1();
  Test2();
  return 0;
}
